/**
 * @param {number[]} nums
 * @return {number[][]}
 */
var threeSum = function(nums) {
    nums.sort((a,b)=>{
        return a-b;  // 修复排序函数，需要返回值
    })
    let result  = [];
    for(let i=0;i<nums.length;i++){
        if(nums[i]>0){
            return result;
        }
        if(i>0 && nums[i]===nums[i-1]){
            continue;
        }
        let left = i+1;
        let right = nums.length-1;
        while(right>left){
            //在找到一组解之后才能去重。避免【0，0，0】这种情况出现。
            const sum = nums[i] + nums[left] + nums[right];
            if(sum === 0){
                result.push([nums[i],nums[left],nums[right]]);
                while(left<right && nums[left]===nums[left+1]){
                    left++;
                }
                while(left<right && nums[right]===nums[right-1]){
                    right--;
                }
                left++;  // 找到一组解后需要移动指针
                right--; // 找到一组解后需要移动指针
            } else if(sum>0){
                right--;
            }else{
                left++;
            }
        }
    }
    return result;
};
const nums = [-1, 0, 1, 2, -1, -4];
console.log(threeSum(nums));